import os
import xml
import time
print(xml.__path__)

from openpyxl import load_workbook
from openpyxl.styles import *

from pyx_package.script import BaseBehavior
from pyx_package.ps_paramete import PsParameter
PYX_MODULE_NAME = "Excel解析"

class ScriptBehavior(BaseBehavior):

    def __init__(self) -> None:
        super().__init__()
        
        self.SetExeMode("iter")
        
        #需要解析的excel路径
        self.p_excel_path = self.CreateParam(
            "excel_path", "表格路径", PsParameter.Input, str)
        self.p_excel_path.value = "C:/Users/ASUS/Desktop/视频测试/测试表格.xlsx"
        
        #工作表的名称
        self.p_excel_table_name = self.CreateParam(
            "p_excel_table_name", "工作表的名称", PsParameter.Input, str)
        self.p_excel_table_name.value = ""
        
        #解析的列的数量
        self.p_columns = self.CreateParam(
            "p_columns", "解析列数量", PsParameter.Input, int)
        self.p_columns.value = 1
        
        #解析的行的数量
        self.p_rows = self.CreateParam(
            "p_rows", "解析行数量", PsParameter.Input, int)
        self.p_rows.value = 1
        
        #输出行内容
        self.p_row_values = self.CreateParam(
            "p_row_values", "行内容", PsParameter.Output, list)
        self.p_row_values.value = []
        
        #迭代间隔时间
        self.p_sleep = self.CreateParam(
            "sleep", "迭代间隔时间", PsParameter.Input, float, 0)
        self.p_sleep.keep_value = True
        
        #工作表对象
        self.ws = None
        
        #当前读取的行(只能从第一行开始读取，不能是0，因为excel表格没有第0行和0列)
        self._cur_row = 1
    
        
    def FirstStep(self):

        #判断excel文件是否存在
        if not os.path.exists(self.p_excel_path.value):
            self.Debug("路径不存在:".format(self.p_excel_path.value), "warning")
            return
        
        try:
            wb = load_workbook(self.p_excel_path.value)
        except:
            self.Debug("表格文件读取失败:".format(self.p_excel_path.value), "warning")
            return
        
        try:
            self.ws = wb[self.p_excel_table_name.value]
        except:
            self.Debug("工作表单读取失败:".format(self.p_excel_table_name.value), "warning")
            return
            
    def DoStep(self):
    
        #每次执行前，先清空输出列表再添加
        self.p_row_values.value.clear()
        
        #如果表单对象为空，则直接结束
        if self.ws == None:
            self.Finish()
            
        self.Debug("当前执行row:{}, column count:{}".format(str(self._cur_row), str(self.p_columns.value)), "info")

        #读取当前行，设置到输出
        for column in range(1, self.p_columns.value + 1):
            
            cell = self.ws.cell(self._cur_row, column)
            self.p_row_values.value.append(str(cell.value))
            self.Debug(str(self._cur_row) + "," + str(column) + "," + str(cell.value), "warning")
            
        time.sleep(self.p_sleep.value)
            
        #读取完一行之后，当前行+1
        self._cur_row += 1
        
        #如果当前行超出了最大行，就结束
        if self._cur_row > self.p_rows.value:
            self.Finish()
            
            